package cn.zero.flowspringbootstater.utils;


import cn.zero.flowspringbootstater.utils.function.BranchHandler;
import cn.zero.flowspringbootstater.utils.function.PresentOrElseHandler;
import cn.zero.flowspringbootstater.utils.function.ThrowExceptionHandler;

/**
 * there is my 。。。
 *
 * @author lei
 * @date 2022-10-20 09:28
 */
public class FunUtil {

    /**
     *  如果参数为true抛出自定义异常
     *  code确定
     *
     * @param err
     * @return com.example.demo.func.ThrowExceptionFunction
     **/
    public static< X extends  Throwable> ThrowExceptionHandler<X> isTure(boolean err) throws  X{

        return (ex) -> {
            if (err) {
                throw ex.get();
            }
        };

    }

    /**
     * 参数为true或false时，分别进行不同的操作
     *
     * @param b
     * @return com.example.demo.func.BranchHandle
     **/
    public static BranchHandler isTureOrFalse(boolean b){

        return (trueHandle, falseHandle) -> {
            if (b){
                trueHandle.run();
            } else {
                falseHandle.run();
            }
        };
    }


    /**
     * 当参数为空时执行runnable 否则进行消费操作
     *
     * @param str
     * @return com.example.demo.func.BranchHandle
     **/
    public static PresentOrElseHandler<?> isBlankOrNoBlank(Object str){

        return (consumer, runnable) -> {
            if (str == null){
                runnable.run();
            } else {
                consumer.accept(str);
            }
        };
    }
    /**
     * 当参数为空时执行runnable 否则进行消费操作
     *
     * @param str
     * @return com.example.demo.func.BranchHandle
     **/
    public static PresentOrElseHandler<?> isBlankOrNoBlank(String str){

        return (consumer, runnable) -> {
            if (str == null||str.length()>0){
                runnable.run();
            } else {
                consumer.accept(str);
            }
        };
    }
}
